<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>es5 面向对象继承特性</title>
  <!-- 
  在 JavaScript ES5 中，面向对象继承是一个重要的概念，它允许我们创建一个对象（子类）从另一个对象（父类）继承属性和方法。以下是关于 ES5 中面向对象继承特性的总结和说明：
  1. 面向对象的基本概念
  - 对象：JavaScript 中的基本数据结构，可以通过字面量或构造函数创建。
  - 构造函数：用于创建对象的函数，通常以大写字母开头。
  - 原型：每个对象都有一个原型，可以通过原型链实现继承。

  2. 继承的方式
  在 ES5 中，主要有以下几种方式实现继承：

   2.1 原型链继承
  通过将子类的原型指向父类的实例来实现继承。这种方式使得子类可以访问父类的属性和方法。
  function Parent() {
      this.name = "Parent";
  }

  Parent.prototype.sayHello = function() {
      console.log("Hello from " + this.name);
  };

  function Child() {
      this.name = "Child";
  }

  // 继承 Parent
  Child.prototype = new Parent();
  Child.prototype.constructor = Child;

  var child = new Child();
  child.sayHello(); // 输出: Hello from Child
   2.2 借用构造函数
  在子类构造函数中调用父类构造函数，以便子类实例可以访问父类的属性。这种方式不支持方法的共享。
  function Parent() {
      this.name = "Parent";
  }

  function Child() {
      Parent.call(this); // 借用 Parent 构造函数
      this.name = "Child";
  }

  var child = new Child();
  console.log(child.name); // 输出: Child
   2.3 组合继承
  结合原型链继承和借用构造函数的优点，既能共享父类的方法，又能访问父类的属性。
  function Parent() {
      this.name = "Parent";
  }

  Parent.prototype.sayHello = function() {
      console.log("Hello from " + this.name);
  };

  function Child() {
      Parent.call(this); // 借用构造函数
  }

  // 继承原型
  Child.prototype = Object.create(Parent.prototype);
  Child.prototype.constructor = Child;

  var child = new Child();
  child.sayHello(); // 输出: Hello from Parent
  3. 继承的优缺点
  - 原型链继承：
    - 优点：可以共享方法，节省内存。
    - 缺点：无法在子类构造函数中向父类传递参数，所有子类实例共享父类属性。

  - 借用构造函数：
    - 优点：可以在子类构造函数中传递参数，避免共享父类属性。
    - 缺点：每个实例都会创建一份父类的方法，浪费内存。

  - 组合继承：
    - 优点：结合了原型链和借用构造函数的优点，既能共享方法，又能传递参数。
    - 缺点：调用父类构造函数两次，可能造成不必要的开销。

  4. 总结
  在 ES5 中，面向对象的继承通过不同的方式实现，包括原型链继承、借用构造函数和组合继承。这些继承方式各有优缺点，开发者可以根据具体需求选择合适的方式。理解继承的实现机制对于构建复杂的对象模型和代码复用具有重要意义。
   -->
</head>
<body>

  <script>

    function Student(name, age, sno, score) {
      this.name = name
      this.age = age
      this.sno = sno
      this.score = score
    }

    Student.prototype.running = function() {}
    Student.prototype.eating = function() {}
    Student.prototype.studying = function() {}


    function Teacher(name, age, title) {
      this.name = name
      this.age = age
      this.title = tilte
    }

    Teacher.prototype.running = function() {}
    Teacher.prototype.eating = function() {}
    Teacher.prototype.teach = function() {}

  </script>
  
</body>
</html>